package practicaPersistenciaTest;

import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import practicaPersistencia.AccessApi;
import practicaPersistencia.DniException;
import practicaPersistencia.EdadFormatoException;
import practicaPersistencia.NombreFormatoException;

public class AccessApiTest {
	private AccessApi acceso;
	
	@Before
	public void ini(){
		acceso=new AccessApi();
	}
	/**
	 * Insertar una fila normal sin errores.
	 * @throws DniException 
	 * @throws EdadFormatoException 
	 * @throws NombreFormatoException 
	 */
	@Test
	public void testInsertar1() throws NombreFormatoException, EdadFormatoException, DniException {
		acceso.insertar(1, "carlos", 23);
		assertTrue(true);
	}
	/**
	 * Insertar un DNI duplicado.
	 * @throws DniException 
	 * @throws EdadFormatoException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=DniException.class)
	public void testInsertar2() throws NombreFormatoException, EdadFormatoException, DniException {
		acceso.insertar(1, "Juan", 26);
	}
	/**
	 * Insertar un nombre fuera de los paramentros por arriba.
	 * @throws DniException 
	 * @throws EdadFormatoException 
	 * @throws NombreFormatoException 
	 */
	
	@Test(expected=NombreFormatoException.class)
	public void testInsertar3() throws NombreFormatoException, EdadFormatoException, DniException{
		acceso.insertar(30, "Carlosssssssssssssssssssssssssssssssssssssssssssssssss", 18);
	}
	/**
	 * Insertar un nombre fuera de los paramentros por abajo.
	 * @throws DniException 
	 * @throws EdadFormatoException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=NombreFormatoException.class)
	public void testInsertar4() throws NombreFormatoException, EdadFormatoException, DniException {
		acceso.insertar(5, "", 35);
	}
	/**
	 * Edad fuera de los paramentros por arriba.
	 * @throws DniException 
	 * @throws EdadFormatoException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=EdadFormatoException.class)
	public void testInsertar5() throws NombreFormatoException, EdadFormatoException, DniException {
		acceso.insertar(4, "Diego", 300);
	}
	/**
	 * Edad fuera de los paramentros por abajo.
	 * @throws DniException 
	 * @throws EdadFormatoException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=EdadFormatoException.class)
	public void testInsertar6() throws NombreFormatoException, EdadFormatoException, DniException {
		acceso.insertar(8, "Javier", 0);
	}
	/**
	 * Introducir un dni existente.
	 * @throws DniException 
	 */
	@Test
	public void testBorrar1() throws DniException{
		acceso.borrar(1);
		assertTrue(true);
	}
	/**
	 * Introducir un dni inexistente.
	 * @throws DniException 
	 */
	@Test(expected=DniException.class)
	public void testBorrar2() throws DniException{
		acceso.borrar(350);
	}
	/**
	 * Modificar una fila correctamente.
	 * @throws DniException 
	 * @throws NombreFormatoException 
	 */
	@Test
	public void testModificarNombre1() throws NombreFormatoException, DniException{
		acceso.modificar(2, "Jacinto");
		assertTrue(true);
	}
	/**
	 * Modificar una fila con error en el nombre por arriba.
	 * @throws DniException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=NombreFormatoException.class)
	public void testModificarNombre2() throws NombreFormatoException, DniException{
		acceso.modificar(3, "Carlosssssssssssssssssssssssssssssssssssssssssssssssss");
	}
	/**
	 * Modificar una fila con error en el nombre por abajo.
	 * @throws DniException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=NombreFormatoException.class)
	public void testModificarNombre3() throws NombreFormatoException, DniException{
		acceso.modificar(4, "");
	}
	/**
	 * Modificar una fila con error al no existir el dni.
	 * @throws DniException 
	 * @throws NombreFormatoException 
	 */
	@Test(expected=DniException.class)
	public void testModificarNombre4() throws NombreFormatoException, DniException{
		acceso.modificar(96, "Julio");
	}
	/**
	 * Modificar una fila correctamente
	 * @throws EdadFormatoException 
	 * @throws DniException 
	 */
	@Test
	public void testModificarEdad1() throws DniException, EdadFormatoException{
		acceso.modificar(2, 62);
		assertTrue(true);
	}
	/**
	 * Modificar una fila con error en el edad por abajo.
	 * @throws EdadFormatoException 
	 * @throws DniException 
	 */
	@Test(expected=EdadFormatoException.class)
	public void testModificarEdad2() throws DniException, EdadFormatoException{
		acceso.modificar(2, 330);
	}
	/**
	 * Modificar una fila con error en el edad por abajo.
	 * @throws EdadFormatoException 
	 * @throws DniException 
	 */
	@Test(expected=EdadFormatoException.class)
	public void testModificarEdad3() throws DniException, EdadFormatoException{
		acceso.modificar(2, 0);
	}
	/**
	 * Modificar una fila con error al no existir el dni.
	 * @throws EdadFormatoException 
	 * @throws DniException 
	 */
	@Test(expected=DniException.class)
	public void testModificarEdad4() throws DniException, EdadFormatoException{
		acceso.modificar(38, 25);
	}
	/**
	 * Introducir un dni que exista
	 * @throws DniException 
	 */
	@Test
	public void testSelectNombre1() throws DniException{
		acceso.getNom(3);
		assertTrue(true);
	}
	/**
	 * Introducir un dni que no exista
	 * @throws DniException 
	 */
	@Test(expected=DniException.class)
	public void testSelectNombre2() throws DniException{
		acceso.getNom(100);
	}
	/**
	 * @throws DniException 
	 * 
	 */
	@Test
	public void testSelectEdad1() throws DniException{
		acceso.getEdad(2);
		assertTrue(true);
	}
	/**
	 * @throws DniException 
	 * 
	 */
	@Test(expected=DniException.class)
	public void testSelectEdad2() throws DniException{
		acceso.getEdad(101);
	}
}
